package edu.zueb.sport.dao;

import edu.zueb.sport.entity.EquipmentType;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/**
 * 器材类型数据访问对象接口
 * 该接口定义了对器材类型表的基本操作。
 */
public interface EquipmentTypeMapper {

    /**
     * 插入新的器材类型
     *
     * @param equipmentType 要插入的器材类型对象
     */
    int insertEquipmentType(EquipmentType equipmentType);

    /**
     * 根据ID查询器材类型
     *
     * @param equipmentTypeId 器材类型的ID
     * @return 查询到的器材类型对象，如果未找到则返回null
     */
    EquipmentType selectEquipmentTypeById(Long equipmentTypeId);

    /**
     * 根据名称查询器材类型
     *
     * @param equipmentTypeName 器材类型的名称
     * @return 查询到的器材类型对象，如果未找到则返回null
     */
    EquipmentType selectEquipmentTypeByName(String equipmentTypeName);

    /**
     * 更新器材类型信息
     *
     * @param equipmentType 要更新的器材类型对象
     */
    int updateEquipmentType(EquipmentType equipmentType);

    /**
     * 删除器材类型
     *
     * @param equipmentTypeId 要删除的器材类型的ID
     */
    int deleteEquipmentTypeById(Integer equipmentTypeId);

    /**
     * 分页统计器材类型数量
     *
     * @param equipmentTypeName 器材类型名称过滤条件（模糊匹配）
     * @return 符合过滤条件的记录总数
     */
    int countByPage(@Param("equipmentTypeName") String equipmentTypeName);

    /**
     * 分页查询器材类型列表
     *
     * @param equipmentTypeName 器材类型名称过滤条件（模糊匹配）
     * @param pageNo            当前页码（从1开始计数）
     * @param pageSize          每页记录数
     * @return 分页查询结果列表（已应用过滤条件和分页）
     */
    List<EquipmentType> listByPage(
            @Param("equipmentTypeName") String equipmentTypeName,
            @Param("pageNo") int pageNo,
            @Param("pageSize") int pageSize);

    /**
     * 获取所有器材类型列表（适用于数据量较小的场景）
     *
     * @return 包含全部器材类型的列表（按创建时间升序排列），返回空列表时表示无器材类型数据
     */
    List<EquipmentType> listAll();
}
